package com.why.controller.jedisCluster;

import com.why.service.JedisClusterStringService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @Description
 * @Author why
 * @Version 1.0.0
 * @Since 1.0
 * @Date 2022/8/18
 */
//@RestController
//@RequestMapping("jediscluster/string")
@Slf4j
public class JedisClusterStringController {

    @Autowired
    private JedisClusterStringService stringService;

    /**
     * set 存入一个key和值
     *
     * @param key
     * @param value result : OK
     */
    @RequestMapping("/set")
    public void set(String key, String value) {
        String result = stringService.set(key, value);
        log.info("string set command result : {}", result);
    }

    /**
     * 读取一个key的值
     *
     * @param key result: value 值
     */
    @GetMapping("/get")
    public void get(String key) {
        String result = stringService.get(key);
        log.info("string get command result : {}", result);
    }

    @PostMapping("/del")
    public void del(String key) {
        Long result = stringService.del(key);
        log.info("string del command result : {}", result);
    }

    /**
     * mset  设置多个kv
     */
    @PostMapping("/mset")
    public void mset() {
        String result = stringService.mset();
        log.info("string mset command result : {}", result);
    }

    /**
     * mget: 获取多个kv
     */
    @GetMapping("/mget")
    public void mget() {
        stringService.mget();
    }

    /**
     * api包分布式锁简单实现
     */
    @GetMapping("/tryLock")
    public void tryLock(String key) {
        stringService.tryLock(key);
    }

    /**
     * incr:可以对key类型+1的操作
     *
     * @param key
     */
//    @PostMapping
//    public void incr(String key) {
//        stringService.incr(key);
//    }
//
//    /**
//     * decr : 可以对key类型-1的操作
//     *
//     * @param key
//     */
//    @PostMapping
//    public void decr(String key) {
//        stringService.decr(key);
//    }
//
//    /**
//     * 同incr，对key的值加increment
//     *
//     * @param key
//     * @param increment
//     */
//    @PostMapping
//    public void incrby(String key, Long increment) {
//        stringService.incrby(key, increment);
//    }
//
//    /**
//     * 同decr，对key的值减decrement
//     *
//     * @param key
//     * @param decrement
//     */
//    @PostMapping
//    public void decrby(String key, Long decrement) {
//        stringService.decrby(key, decrement);
//    }
//
//    /**
//     * 对key的值加浮点型 increment
//     *
//     * @param key
//     * @param increment
//     */
//    @PostMapping
//    public void incrbyfloat(String key, double increment) {
//        stringService.incrbyfloat(key, increment);
//    }
//
//    /**
//     * 对指定key的字符串进行追加，如果key为整形，会被转为字符串
//     *
//     * @param key
//     * @param appendVal
//     */
//    @PostMapping
//    public void append(String key, String appendVal) {
//        stringService.append(key, appendVal);
//    }
//
//    /**
//     * 返回value的长度
//     *
//     * @param key
//     */
//    @GetMapping
//    public void strlen(String key) {
//        stringService.strlen(key);
//    }
//
//    /**
//     * 用指定的字符串覆盖给定 key 所储存的字符串值，覆盖的位置从偏移量 offset 开始
//     *
//     * @param key
//     * @param offset
//     * @param value
//     */
//    @PostMapping
//    public void setrange(String key, long offset, String value) {
//        stringService.setrange(key, offset, value);
//    }
//
//    /**
//     * redis command : getrange key start end
//     * description : 获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)
//     *
//     * @param key
//     * @param start
//     * @param end
//     */
//    @GetMapping
//    public void getrange(String key, long start, long end) {
//        stringService.getrange(key, start, end);
//    }
//
//    @PostMapping
//    public void getset(String key, String value) {
//        stringService.getset(key, value);
//    }
}
